Skip to content

launcher: clipboard history & emoji picker#1298

Open
PixelKhaos wants to merge 37 commits into
caelestia-dots:mainfrom
PixelKhaos:clip-center
Open

launcher: clipboard history & emoji picker#1298
PixelKhaos wants to merge 37 commits into
caelestia-dots:mainfrom
PixelKhaos:clip-center

Conversation

@PixelKhaos
Copy link
Copy Markdown
Contributor

@PixelKhaos PixelKhaos commented Mar 17, 2026

Clipboard history UI

  • Navigation bar for categories/types
  • Filter search with ">clipboard some words"
  • Pinning items
  • Delete per item
  • Clearing all per type
    • Skips any pinned items
  • Image preview panel
    • Supports image html from web (and copy binary)
  • All/type item count

IPC with
caelestia shell clipboard toggle


Emoji picker

  • Search by emoji name, i.e ">emoji grinning face"
  • Navigate grid with arrow keys or mouse
  • JSON for emojis
  • All/Categories navigation bar
    • Category with last 20 used emojis

IPC with
caelestia shell emoji toggle

recording_20260317_08-57-26.mp4

Add the commands in shell.json, under config.launcher.actions

      {
        "command": [
          "autocomplete",
          "clipboard"
        ],
        "dangerous": false,
        "description": "Browse clipboard history",
        "enabled": true,
        "icon": "content_paste",
        "name": "Clipboard"
      },
      {
        "command": [
          "autocomplete",
          "emoji"
        ],
        "dangerous": false,
        "description": "Pick an emoji",
        "enabled": true,
        "icon": "sentiment_satisfied",
        "name": "Emoji"
      }

github-actions Bot and others added 17 commits January 18, 2026 00:21
       - Clipboard history list as '>clipboard' action
         - IPC command 'caelestia shell clipboard toggle'
         - Persistent pinning of history items
         - Preview container for images
       - Emoji picker grid as 'emoji' action
         - IPC command 'caelestia shell emoji toggle'
         - Categories and frequently used
         - Grid view with arrowkey navigation
              - Preview pane
                - smart switch between key nav and hover for previewing item
                - Embeds stored html img tags, with copy button for binary
                - omits displaying if source 404's
                - Ducks out of the way for sidepanel and utilities drawers
              - Cliphist categories (All, Images, Misc)
              -  Item count per category
              -  Clear all button, restricted to in current category & non-pinned
                - Confirmation modal for deletion
@PixelKhaos PixelKhaos marked this pull request as draft March 17, 2026 20:37
@PixelKhaos PixelKhaos marked this pull request as ready for review March 17, 2026 20:44
@PixelKhaos
Copy link
Copy Markdown
Contributor Author

Something I have noticed is that while I did originally handle opening launcher with specific text working fine in most cases, more complex layouts like with the navbar started making things a bit finicky with IPC to open.
Would open with incorrect sizing as it still transitioned from the usual applist, later I got it to where it would open but freeze in the middle of the animation and skip to final height.

The latter I managed to rework a bit to where it would only do so sometimes, and the only working attempt to fix that was to add a retarget timer, which effectively just waits to animate in those edgecases.
I tried a few other approaches with states and bindings, but quickly got messy

@chea-vuthearith
Copy link
Copy Markdown
Contributor

chea-vuthearith commented Mar 22, 2026

i desperately needed this thanks for implementing @PixelKhaos, it works perfectly!

However could we store the pinnedClipboardItems and frequentEmojis in some file in .local/state instead of the main config file?
The reason for this is on distros with a read only fs (nixos) every time i copy an emoji it gives me an error due to how nixos manages things
image

Another thing is the ipc cmd, i think instead of having one for clipboard and another for emoji, we could just have 1 that would accept a string argument that will open the launcher pre-filled with the input. this would make keybinds for the launcher more customizable

Other than this, thanks again! i will be using your fork until its merged to main haha

@PixelKhaos
Copy link
Copy Markdown
Contributor Author

However could we store the pinnedClipboardItems and frequentEmojis in some file in .local/state instead of the main config file?

That I can look into yeah, I was using the json because it's all a pretty limited list of id's etc and easy way of storing it, but absolutely makes sense to store elsewhere as a temp.

Another thing is the ipc cmd, i think instead of having one for clipboard and another for emoji, we could just have 1 that would accept a string argument that will open the launcher pre-filled with the input. this would make keybinds for the launcher more customizable

You mean allowing a bind like caelestia shell emoji get tomato?
Pretty decent idea, a bit extra but doesn't hurt, though I can't see any reason for it

@chea-vuthearith
Copy link
Copy Markdown
Contributor

You mean allowing a bind like caelestia shell emoji get tomato?
Pretty decent idea, a bit extra but doesn't hurt, though I can't see any reason for it

no sir, i meant something like caelestia shell launcher >emoji
then that will open up the launcher and prefill it with >emoji

so they can use with other launcher modules
caelestia shell launcher >clipboard
caelestia shell launcher >calc

@PixelKhaos
Copy link
Copy Markdown
Contributor Author

no sir, i meant something like caelestia shell launcher >emoji

Oh you mean so it's in place to be useful for other/new launcher actions!
That would essentially just be generalizing the two I got yeah, solid idea

@PixelKhaos
Copy link
Copy Markdown
Contributor Author

PixelKhaos commented Mar 22, 2026

@chea-vuthearith combined the two IPCs into one launcherHandler,
which CustomShortcut uses it like launcherHandler.action("emoji")

launcherHandler includes open, toggle and action. Action is the same as toggle, just including the prefix from config, and Open doesn't toggle launcher off if pressed again.

e.g., caelestia shell launcher open browser opens with a standard search
caelestia shell launcher toggle ">variant " to write the entire string out, needs space for actions.
or caelestia shell launcher action variant

@chea-vuthearith
Copy link
Copy Markdown
Contributor

launcherHandler includes open, toggle and action. Action is the same as toggle, just including the prefix from config, and Open doesn't toggle launcher off if pressed again.

Awesome work @PixelKhaos thanks

I noticed another thing, after i selected something in the clipboard menu and open it up again it seems the selected idx doesnt reset but +1 from the prev

recording_20260323_11-56-06.mp4

so initially selected idx is 0
open clipboard and selects something

now its 1
repeat

now its 2 and so on

@PixelKhaos
Copy link
Copy Markdown
Contributor Author

I noticed another thing, after i selected something in the clipboard menu and open it up again it seems the selected idx doesnt reset but +1 from the prev

Oh right, because we move the copied item to the top as it's the latest entry
But yeah, it should reset the current index back to 0

@chea-vuthearith
Copy link
Copy Markdown
Contributor

chea-vuthearith commented Mar 25, 2026

Hope im not being too annoying HAHA. but i noticed another thing, when using keyboard to navigate the clipboard menu, previews for the images dont show up

@PixelKhaos
Copy link
Copy Markdown
Contributor Author

Hope im not being too annoying HAHA. but i noticed another thing, when using keyboard to navigate the clipboard menu, previews for the images dont show up

It should, but you may have your mouse hovering an item at the same time, so when the list shifts it might count the mouse as the last interaction method

@chea-vuthearith
Copy link
Copy Markdown
Contributor

Hope im not being too annoying HAHA. but i noticed another thing, when using keyboard to navigate the clipboard menu, previews for the images dont show up

It should, but you may have your mouse hovering an item at the same time, so when the list shifts it might count the mouse as the last interaction method

Ah yes, you're correct. false alarm then

@PixelKhaos
Copy link
Copy Markdown
Contributor Author

Fixed transitioning between emoji picker and clipboard history when using IPC to toggle each, now holds the height during transitioning contents and then adjusts height instead of animating back to 0 because there's no content.

Moved clipboard nav bar to transition along with list rather than it's own height, and overall a stab at getting multiple different layouts/UI to play nicer within the launcher

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants